TypeORM で find で Date 見る
タイトルが雑
みなさんは TypeORM の find で時刻見たい時ありますよね?流石にあると思います。
やろうとした時こうすればいい!みたいなのが一発で出てこなかったのが腹立つので書き残します。
けど Scrapbox って性質上異常に SEO 弱いから検索に出ることはなさそう
TypeORM 0.2.21 + MariaDB 10.4.11
より後/より前/の間
本当は全部セクション分けてたんだけどこれ意味ないじゃん
code:find-dateOptions.ts
import { Between, MoreThan, LessThan, LessThanOrEqual, MoreThanOrEqual } from "typeorm"
const main = async () => {
// より前 / 過去
const lessThan = repository.find({
where: { created_at: LessThan(moment().format()) },
})
// より前または等価 / 今か過去
const lessThanOrEqual = repository.find({
where: { created_at: LessThanOrEqual(moment().format()) },
})
// より後 / 未来
const moreThan = repository.find({
where: { created_at: MoreThan(moment().format()) },
})
// より後または等価 / 今か未来
const moreThanOrEqual = repository.find({
where: { created_at: MoreThanOrEqual(moment().format()) },
})
// 間 / 今から5時間の間
const between = repository.find({
where: { created_at: Between(moment(targetDate).format(), moment().add(5, 'hours').format()) },
})
}
コツは Date オブジェクトとかじゃなくて moment の format() だとか Date の toISOString()で事前に ISO 形式の文字列にしておくことです。どういうこと? これ Date で指定するとうまく行かないのって toString() の結果がクエリに採用されるとかそういう感じの挙動するからなのかな?面倒になっちゃってまだ実装見てないからわからん…。